
import _Banque.*;
import _Exception.BUException;
import _Exception.IPException;
import _Tests.Tests;

public class TI_Banque_N5 {

	public static void main(String[] args) throws IPException, BUException
	{
		Tests.Begin("Integration du package _Banque", "1.0.0");
		
		Tests.Design("Integration de 2 titulaires avec un compte bancaire chacun " +
				"(un courant et un epargne)", 3);
		{
			// --- creation de la banque support
			Banque banque = new Banque();
			
			// --- Creation des titulaires
			Titulaire bob = new Titulaire("Bob", "Eponge", "1999/05/01", "Bikini Bottom");
			Titulaire carlo = new Titulaire("Carlo", "Calamar", "1985/15/21", "Maison");
			
			// --- creation de comptes bancaires
			CompteCourant ccBob = new CompteCourant(banque, bob);
			CompteEpargne ceCar = new CompteEpargne(banque, carlo, 5.f);
			
			// --- credite le compte de bob
			ccBob.executer("Versement initial", 'V', 200.f);
			
			Tests.Case("Cas des titulaires qui changent d'adresse");
			{
				bob.setAdresse("Au fond de la mer");
				carlo.setAdresse("Far far away");
				
				Tests.Unit("Au fond de la mer", ccBob.getAdresseTitulaire());
				Tests.Unit("Far far away", ceCar.getAdresseTitulaire());
			}

			Tests.Case("Cas des titulaires qui s'echangent de l'argent entre leur comptes (une operation)");
			{
				ccBob.executer(new OperationBancaire(banque, 'R', "Retrait de 200 pour Carlo", 200));
				ceCar.executer(new OperationBancaire(banque, 'V', "Versement de 200 par Bob", 200));
				
				Tests.Unit(0.f, ccBob.getSoldeCompte());
				Tests.Unit(200.f, ceCar.getSoldeCompte());
				Tests.Unit(_Banque.dateCourante(), ccBob.getDateDerniereOperation());
				Tests.Unit(_Banque.dateCourante(), ceCar.getDateDerniereOperation());
				Tests.Unit(2, ccBob.getNombreOperations());
				Tests.Unit(1, ceCar.getNombreOperations());
			}
			
		}
		
		Tests.End();
	}

}
